package com.ruoyi.customer.service;

import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.customer.common.DisCustomerRequestBo;
import com.ruoyi.customer.domain.bo.CustomerBo;
import com.ruoyi.customer.domain.bo.CustomerPoolPullBo;
import com.ruoyi.customer.domain.bo.CustomerReturnPoolBo;
import com.ruoyi.customer.domain.bo.RecordBo;
import com.ruoyi.customer.domain.vo.CustomerVo;
import com.ruoyi.customer.domain.vo.MxInfoVo;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 客户信息Service接口
 *
 * @author suntf
 * @date 2023-07-29
 */
public interface ICustomerService {

    /**
     * 查询客户信息
     */
    CustomerVo queryById(Long id);

    /**
     * 查询客户信息列表
     */
    TableDataInfo<CustomerVo> queryPageList(CustomerBo bo, PageQuery pageQuery);

    /**
     * 查询客户不分页
     */
    List<CustomerVo> queryInfoList(CustomerBo bo);

    /**
     * 查询客户信息列表
     */
    List<CustomerVo> queryList(CustomerBo bo);

    /**
     * 新增客户信息
     */
    Boolean insertByBo(CustomerBo bo);

    /**
     * 修改客户信息
     */
    Boolean updateByBo(CustomerBo bo);

    /**
     * 校验并批量删除客户信息信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 客户退回到池子
     *
     * @return
     */
    Boolean customerReturnPool(CustomerReturnPoolBo customerReturnPoolBo);

    /**
     * 我的客户拉取上级池子数据
     * @param customerPoolPullBo
     * @return
     */
    String customerPoolPull(CustomerPoolPullBo customerPoolPullBo);

    /**
     * 快过期的星级用户推送给客户
     * @author: suntf
     * @date: 2023/8/15 20:34
     * @param
     * @return void
     */
    void sendStarCustomerToUser();

    String customerRL(Long[] id);

    // 单独保存记录信息
    void saveBz(RecordBo recordBo);

    MxInfoVo getMxInfo(Long id);

    void recoverCustomer();

    // 回收分配客户
    void recoverDisCustomer(String type);

    Map<String, String> getCustomerStar(String lookType);

    void sendStarCustomerToUser(String userId);

    List<Map<String, String>> getCustomerStarList(String userId);

    Map<String, String> getCustomerStarInfo(String userId);

    R setVip(Long customerId,int type);

    R invite(Long customerId);

    R upDoor(Long customerId);

    R pushCustomer(Long[] customerId);

    R pushDis(DisCustomerRequestBo pushDisBo);

    R pushReturn(CustomerReturnPoolBo customerReturnPoolBo);


    /**
     * 操作新意向-待认领数据  下发给业务员
     */
    void newIntention();

    Integer updateCustomerDeptByTask(SysUser sysUser);
}
